<?php
if (empty($_SESSION)) @session_start();

// 包含 XMLRPC 库文件
require_once dirname(__FILE__).'/vendor/CAS/CAS.php';

/**
 * CAS 单点登录整合类。
 *
 * @package K12SSO
 * @author Nio Xiao
 */
class K12SSO_CAS implements K12SSO_Interface
{
    /**
     * 单点登录需要的 UAC XMLRPC 参数设置。
     * @var array
     */
    private $options = array();
    
    //================================= K12SSO_Interface Start =================================

    /**
     * 构建函数。
     *
     * @param array $options 初始化参数设置数组，需要设置 CAS 参数：
     *                          array(
     *                              'cas_host' => '主机地址',
     *                              'cas_port' => '端口',
     *                              'cas_path' => '服务路径',
     *                          )
     * @return K12SSO_Interface
     */
    public function __construct($options = array())
    {
        $this->options = $options;
    }
    
    /**
     * 执行登录操作。
     *
     * @param string $url 登录之后返回的 URL 。
     * @return string 登录成功之后，返回已登录的用户名。
     */
    public function doLogin($url = null)
    {
        // initialize phpCAS
        phpCAS::client(CAS_VERSION_2_0, $this->options['cas_host'], $this->options['cas_port'], $this->options['cas_path'], FALSE);
        // no SSL validation for the CAS server
        phpCAS::setNoCasServerValidation();
        // force CAS authentication
        phpCAS::forceAuthentication();
        return phpCas::getUser();
    }
    
    /**
     * 执行登出操作。
     *
     * @param string $url 登出之后返回的 URL 。
     */
    public function doLogout($url = null)
    {
        if (!$url) $url = K12SSO_Factory::getFullRequestUri();
        // initialize phpCAS
        phpCAS::client(CAS_VERSION_2_0, $this->options['cas_host'], $this->options['cas_port'], $this->options['cas_path'], FALSE);
        // no SSL validation for the CAS server
        phpCAS::setNoCasServerValidation();
        phpCAS::logout(array('service' => $url));
    }

    /**
     * 获取最后的错误信息。
     *
     * @return string
     */
    public function getError()
    {
        return $this->error;
    }
    
    //================================= K12SSO_Interface End =================================    
}
